/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package robozanalib;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author juan__000
 */
public class Jogador implements Runnable {

    public Jogador(Socket cliente, int i, Fase m) throws IOException {
        this.cliente = cliente;
        saida = new ObjectInputStream(this.cliente.getInputStream());
        entrada = new ObjectOutputStream(this.cliente.getOutputStream());
        this.i=i;
        this.mapa=m;//  entrada.writeBoolean(true);//Mensagem para o usuário mandar nome
        //this.nome=saida.readUTF();//recebe nome        
    }
    
    private final ObjectInputStream saida;
    private final ObjectOutputStream entrada;
    private final Socket cliente;
    private Fase mapa;
    private String nome;
    private Robo[] buffer;
    private int i;//Identidade do jogador respectivo ao sock

    @Override
    public void run() {
        try {
            entrada.writeInt(i);
            entrada.flush();
            nome= saida.readObject().toString();
            entrada.writeObject(mapa.getPlayers());
            buffer=mapa.getPlayers();
        } catch (IOException | ClassNotFoundException ex) {
            Logger.getLogger(Jogador.class.getName()).log(Level.SEVERE, null, ex);
        }
        while(true){
            recebeDados();
            enviaDados();
        }
    }
    
    public void recebeDados(){//recebe dado do servidor
        try {
            if(!Arrays.equals(buffer, mapa.getPlayers())){
                entrada.writeObject(mapa.getPlayers());
                System.out.println("Repassando pacote do usuário "+nome);
                
            }
        } catch (IOException ex) {
            Logger.getLogger(Jogador.class.getName()).log(Level.SEVERE, null, ex);
        }
        buffer=mapa.getPlayers();
    }

    public void enviaDados() {//repassa dado para o servidor
        try {
            if (saida.available()!=0) {
                saida.read();
                buffer=(Robo[]) saida.readObject();
                mapa.setPlayers(buffer); 
                System.out.println("Pacote recebido pelo usuário "+nome);
            }
        } catch (IOException | ClassNotFoundException ex) {
            System.out.println("O pacote foi enviado mas apresenta erro de repasse");
        } catch (InterruptedException ex) {
            Logger.getLogger(Jogador.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
}
